function quick_sort(arr, l, r) {
    if (l >= r) return;
    // 记录下左右指针的位置
    let x = l,
        y = r,
        // 记录下基准值
        base = arr[l];
    while (x < y) {
        // partition
        // 找到右边第一个小于基准值的位置
        while (x < y && arr[y] >= base) y--;
        // 将小值partition到左侧，左指针右移一位
        if (x < y) arr[x++] = arr[y];
        // 找到左边大于base的位置
        while (x < y && arr[x] < base) x++;
        // 将大值partition到右侧，右指针左移一位
        if (x < y) arr[y--] = arr[x];
    }
    // 基准值重新赋值
    arr[x] = base;
    // 左右两部分 分治处理
    quick_sort(arr, l, x - 1);
    quick_sort(arr, x + 1, r);
    return;
}
let arr = [8, 6, 9, 4, 5, 0, 1, 3, 2, 7];
quick_sort(arr, 0, arr.length - 1);
console.log(arr);
